/**
 * 防抖函数
 * @param {Function} func 要执行的函数
 * @param {number} delay 延迟时间（毫秒）
 * @returns {Function}
 */
export function debounce(func, delay = 300) {
  let timeoutId
  return function (...args) {
    clearTimeout(timeoutId)
    timeoutId = setTimeout(() => func.apply(this, args), delay)
  }
}

/**
 * 节流函数
 * @param {Function} func 要执行的函数
 * @param {number} delay 间隔时间（毫秒）
 * @returns {Function}
 */
export function throttle(func, delay = 300) {
  let lastCall = 0
  return function (...args) {
    const now = Date.now()
    if (now - lastCall >= delay) {
      lastCall = now
      return func.apply(this, args)
    }
  }
}

/**
 * 异步防抖函数（用于API请求）
 * @param {Function} func 异步函数
 * @param {number} delay 延迟时间
 * @returns {Function}
 */
export function debounceAsync(func, delay = 300) {
  let timeoutId
  let lastPromise
  
  return function (...args) {
    return new Promise((resolve, reject) => {
      clearTimeout(timeoutId)
      
      timeoutId = setTimeout(async () => {
        try {
          // 取消之前的请求（如果支持）
          if (lastPromise && lastPromise.cancel) {
            lastPromise.cancel()
          }
          
          lastPromise = func.apply(this, args)
          const result = await lastPromise
          resolve(result)
        } catch (error) {
          reject(error)
        }
      }, delay)
    })
  }
}
